package com.sise.Array;

/**
 *      55. 跳跃游戏
 *
 *      给定一个非负整数数组 nums ，你最初位于数组的 第一个下标 。
 *      数组中的每个元素代表你在该位置可以跳跃的最大长度。
 *      判断你是否能够到达最后一个下标。
 *
 *      输入：nums = [2,3,1,1,4]
 *      输出：true
 *      解释：可以先跳 1 步，从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
 */
public class _55_canJump {
    public boolean canJump(int[] nums) {
        if (nums == null) return false;

        int k = 0;                              // 前 n-1 个元素能够跳到的最远距离
        for (int i = 0; i <= k; i++) {          // 这里的 k 最远距离是随着 循环内容而改变的，在循环中不断的更新最长距离
            int temp = i + nums[i];             // 第 i 个元素能够跳到的最远距离
            k = Math.max(k, temp);              // 更新最远距离

            if (k >= nums.length - 1) return true;      // 如果最远距离已经大于或等于最后一个元素的下标，则说明能跳过去，退出
        }
        return false;
    }
}